package main.old.old_2022;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @Author: Take-off
 * @Description: TODO
 *
 * 1.给你一个数组 nums 。数组「动态和」的计算公式为：runningSum[i] = sum(nums[0]…nums[i]) 。
 * 请返回 nums 的动态和。
 *
 * 2。寻找数组的中心下标
 *
 * @Date: 2022/7/18 5:00 PM
 * @Version: 1.0
 **/
public class Solution0718 {

    //1.给你一个数组 nums 。数组「动态和」的计算公式为：runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。
    //暴力方法
    public static int[] runningSum(int[] nums) {

        List<Integer> sum = new ArrayList<>();
        for (int num:nums){
            Integer integer = 0;
            if (sum.size() > 0){
                integer = sum.get(sum.size() - 1);
            }
            num = num + integer;
            sum.add(num);
        }
        int[] result = new int[sum.size()];
        for ( int i = 0; i< sum.size();i++){
            result[i] = sum.get(i);
        }
        return result;
    }

    //题解-原地修改，与暴力方法相似，区别于不用数组承载
    public static int[] runningSumTwo(int[] nums){
        for (int i = 1; i < nums.length;i++){
            nums[i] = nums[i-1] +nums[i];
        }
        return nums;
    }

    //2。寻找数组的中心下标
    //暴力方法
    public static int pivotIndex(int[] nums) {
        for (int i = 0;i<nums.length;i++){
            //左边
            int left = 0;
            for (int j =0; j < i;j++){
                left += nums[j];
            }

            //右边
            int right = 0;
            for (int k =nums.length -1 ; k > i;k--){
                right += nums[k];
            }
            if (left == right){
                return i;
            }
        }
        return  -1;
    }

    //题解-只算一边的和，乘2 加上指数 等于总和就是解
    public static int pivotIndexTwo(int[] nums){
        int sum = Arrays.stream(nums).sum();
        int count = 0;
        for (int i =0;i< nums.length;i++){
            if (2*count + nums[i] == sum){
                return i;
            }
            count += nums[i];
        }
        return  -1;
    }

    public static void main(String[] args) {
        int[] nums =  {2, 1, -1};
//        int[] ints = Solution.runningSumTwo(nums);

        int i = Solution0718.pivotIndex(nums);
        System.out.println(i);

    }

}
